var express = require('express');
var bodyParser = require('body-parser');
var session = require('express-session');

var Geetest = require('./static/gt-sdk');

var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

app.use(express.static('./static'));
app.use(session({
    secret: 'my-secret',
    resave: false,
    saveUninitialized: true
}));

var fullpage = require('./static/fullpage');
app.get('/gt/register-fullpage', function(req, res){
    // 向极验证申请每次验证所需的challenge
    fullpage.register(null, function(err, data){
        if(err){
            console.error(err);
            res.status(500);
            res.send(err);
            return;
        }
        if(!data.success){
            // 进入failback，如果一直进入此模式，请检查服务器到极验证服务器是否可访问
            // 可以通过修改hosts把极验证服务器 api.geetest.com 指到不可访问的地址

            // 1. 继续使用极验证提供的failback备用方案
            req.session.fallback = true;
            res.send(data);

            // 2. 使用自己提供的备用方案
            // todo
        }else {
            // 正常模式
            req.session.fallback = false;
            res.send(data);
        }
    })
})

app.post('/gt/validate-fullpage', function(req, res){
    // 对ajax提供的验证凭证进行二次验证
    fullpage.validate(req.session.fallback, {
        geetest_challenge: req.body.geetest_challenge,
        geetest_validate: req.body.geetest_validate,
        geetest_seccode: req.body.geetest_seccode
    }, function(err, success){
        if(err){
            res.send({
                status: 'error',
                info: err
            });
        }else if(!success){
            res.send({
                status: 'fail',
                info: '登录失败'
            })
        }else{
            res.send({
                status: 'success',
                info: '登录成功'
            })
        }
    })
})

var click = require('./static/click');
app.get('/gt/register-click', function(req, res){
    // 向极验证申请每次验证所需的challenge
    click.register(null, function(err, data){
        if(err){
            console.error(err);
            res.status(500);
            res.send(err);
            return;
        }

        if(!data.success){
            // 进入failback，如果一直进入此模式，请检查服务器到极验证服务器是否可访问
            // 可以通过修改hosts把极验服务器api.geetest.com指定到不可访问的地址

            // 为以防万一，你可以选择以下两种方式之一：

            // 1. 继续使用极验证提供的failback备用方案
            req.session.fallback = true;
            res.send(data);

            // 2. 使用自己提供的备用方案
            // todo

        } else {
            // 正常模式
            req.session.fallback = false;
            res.send(data);
        }
    })
})
app.post('/gt/validate-click', function(req, res){
    // 对ajax提供的验证凭证进行二次验证
    click.validate(req.session.fallback, {
        geetest_challenge: req.body.geetest_challenge,
        geetest_validate: req.body.geetest_validate,
        geetest_seccode: req.body.geetest_seccode
    }, function(err, success){
        if(err){
            // 网络错误
            res.send({
                status: 'error',
                info: err
            })
        }else if(!success){
            // 二次验证失败
            res.send({
                status: 'fail',
                info: '登录失败'
            });
        }else{
            res.send({
                status: 'success',
                info: '登录成功'
            })
        }
    })
})

var slide = require('./static/slide');
app.get('/gt/register-slide', function(req, res){
    // 向极验申请每次验证所需的challenge
    slide.register(null, function(err, data){
        if(err){
            console.error(err);
            res.status(500);
            res.send(err);
            return;
        }

        if(!data.success){
            // 进入failback，如果一直进入此模式，请检查服务器到极验服务器是否可访问
            // 可以通过修改 hosts 把极验服务器 api.geetest.com 指到不可访问的地址

            req.session.fallback = true;
            res.send(data);

            // todo
        }else{
            req.session.fallback = false;
            res.send(data);
        }
    })
})

app.post('/gt/validate-slide', function(req, res){
    // 对ajax提供的验证凭证进行二次验证
    slide.validate(req.session.fallback, {
        geetest_challenge: req.body.geetest_challenge,
        geetest_validate: req.body.geetest_validate,
        geetest_seccode: req.body.geetest_seccode
    }, function(err, success){
        if(err){
            res.send({
                status: 'error',
                info: err
            })
        } else if (!success) {
            res.send({
                status: 'fail',
                info: '登录失败'
            })
        }else{
            res.send({
                status: 'success',
                info: '登录成功'
            })
        }
    })
})
var port = 8877;
app.listen(port, function(){
    console.log('listening at http://localhost:' + port)
})


